package main

import "fmt"

type Point struct {
	x int
	y int
}
type Rect struct {
	left, right Point
}

type Rect2 struct {
	left  *Point
	right *Point
}

func main() {

	r1 := Rect{
		Point{1, 2},
		Point{3, 4},
	}
	// r1 有4个int ，在内存中连续分配，如果是指针类型，指针本身类型是连续的，但是指向的地址不一定连续
	fmt.Printf("r1.left.x 地址=%p r1.left.y 地址=%p r1.right.x 地址=%p r1.right.y 地址=%p \n",
		&r1.left.x, &r1.left.y, &r1.right.x, &r1.right.y)
	// r1.left.x 地址=0x1140a0c0 r1.left.y 地址=0x1140a0c4 r1.right.x 地址=0x1140a0c8 r1.right.y 地址=0x1140a0cc
	r2 := Rect2{
		&Point{1, 2},
		&Point{3, 4},
	}
	fmt.Printf("r2.left 本身地址=%p r2.right 本身地址=%p \n",
		&r2.left, &r2.right)
	fmt.Printf("r2.left 指向地址=%p r2.right 指向地址=%p \n",
		r2.left, r2.right)
}
